package com.whfc.mach.dao;

import com.whfc.entity.dto.Apply.req.EquipmentIdReq;
import com.whfc.mach.dto.*;
import com.whfc.mach.dto.report.AppMachWeekReportDTO;
import com.whfc.mach.dto.report.WeekReportDetailDTO;
import com.whfc.mach.entity.AppMach;
import com.whfc.mach.entity.AppMachDay;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.Date;
import java.util.List;

public interface AppMachDayMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(AppMachDay record);

    int insertSelective(AppMachDay record);

    AppMachDay selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(AppMachDay record);

    int updateByPrimaryKey(AppMachDay record);

    /**
     * 插入 or 更新
     *
     * @param record
     * @return
     */
    int insertUpdate(AppMachDay record);

    /**
     * 查询单机-在指定时间段内,工作的天数(工作时长>1小时)
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     */
    Integer countWorkDays(@Param("machId") Integer machId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 获取指定时间段内.工作的设备数量(工作时长>1小时)
     *
     * @param deptIdList
     * @param startDate
     * @param endDate
     * @return
     */
    Integer countWorkMachNum(@Param("deptIdList") Collection<Integer> deptIdList, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询机群-在指定时间段内,每天的工作数据
     *
     * @param deptIdList
     * @param startDate
     * @param endDate
     * @return
     */
    List<MachCurveMapDayDTO> selectMultiMachCurveMapDayList(@Param("deptIdList") Collection<Integer> deptIdList, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询机群-在指定时间段内,每天的工作数据 根据设备SN查找
     *
     * @param deviceSnList SN列表
     * @param startDate
     * @param endDate
     * @return
     */
    List<MachCurveMapDayDTO> selectMultiMachCurveMapDayListBySnList(@Param("deviceSnList") Collection<String> deviceSnList, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询机群的雷达图数据
     *
     * @param deptIdList
     * @param startDate
     * @param endDate
     * @return
     */
    MachRadarMapDTO selectMultiMachRadarMap(@Param("deptIdList") Collection<Integer> deptIdList, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询机群的曲线图数据
     *
     * @param deptIdList
     * @param startDate
     * @param endDate
     * @return
     */
    MachCurveMapDTO selectMultiMachCurveMap(@Param("deptIdList") Collection<Integer> deptIdList, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 纬度分析-通过设备类型获取设备工作数
     *
     * @param machTypeIds
     * @param deptIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<MachDataDTO> selectMachNumWorkByMachType(@Param("machTypeIds") Collection<Integer> machTypeIds, @Param("deptIds") List<Integer> deptIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 纬度分析-通过持有单位获取设备工作数
     *
     * @param corpIds
     * @param deptIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<MachDataDTO> selectMachNumWorkByCorp(@Param("corpIds") Collection<Integer> corpIds, @Param("deptIds") List<Integer> deptIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 纬度分析-通过设备类型获取设备在线数
     *
     * @param machTypeIds
     * @param deptIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<MachDataDTO> selectMachNumOnlineByMachType(@Param("machTypeIds") Collection<Integer> machTypeIds, @Param("deptIds") List<Integer> deptIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 纬度分析-通过持有单位获取设备在线数
     *
     * @param corpIds
     * @param deptIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<MachDataDTO> selectMachNumOnlineByCorp(@Param("corpIds") Collection<Integer> corpIds, @Param("deptIds") List<Integer> deptIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 纬度分析-通过设备类型获取设备运行数据
     *
     * @param machTypeIds
     * @param deptIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<MachDataDTO> selectMachRunDataByMachType(@Param("machTypeIds") Collection<Integer> machTypeIds, @Param("deptIds") List<Integer> deptIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 纬度分析-通过持有单位获取设备运行数据
     *
     * @param corpIds
     * @param deptIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<MachDataDTO> selectMachRunDataByCorp(@Param("corpIds") Collection<Integer> corpIds, @Param("deptIds") List<Integer> deptIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 纬度分析-通过设备类型获取设备总数
     *
     * @param machTypeIds
     * @param deptIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<MachDataDTO> selectMachNumTotalByMachType(@Param("machTypeIds") Collection<Integer> machTypeIds, @Param("deptIds") List<Integer> deptIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 纬度分析-通过持有单位获取设备总数
     *
     * @param corpIds
     * @param deptIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<MachDataDTO> selectMachNumTotalByCorp(@Param("corpIds") Collection<Integer> corpIds, @Param("deptIds") List<Integer> deptIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 查找机械类型及数量
     *
     * @param deptIds
     * @param startDate
     * @param endDate
     * @return
     */
    List<MachTypeAndNumDTO> selectMachTypeAndNum(@Param("deptIds") List<Integer> deptIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询设备的统计数据
     *
     * @param deptIds
     * @param startDate
     * @param endDate
     * @return
     */
    List<AppMachDataStatDTO> selectMachDataStatList(@Param("deptIds") List<Integer> deptIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);


    /**
     * 查找设备每天数据
     *
     * @param deptIds
     * @param date
     * @return
     */
    List<MachDayDataDTO> selectMachDayDataDTO(@Param("deptIds") List<Integer> deptIds, @Param("date") Date date);

    /**
     * 查询设备一段时间的数据
     *
     * @param deptIds
     * @param startDate
     * @param endDate
     * @return
     */
    List<MachDayDataDTO> selectMachAvgDataDTO(@Param("deptIds") List<Integer> deptIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 获取周报设备
     *
     * @param deptIds
     * @param startDate
     * @param endDate
     * @return
     */
    List<AppMachWeekReportDTO> selectMach(@Param("deptIds") List<Integer> deptIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查看下载周报的数据
     *
     * @param deptIds
     * @param startDate
     * @param endDate
     * @return
     */
    List<WeekReportDetailDTO> selectWeekReportDetail(@Param("deptIds") List<Integer> deptIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询在指定日期内的设备列表
     *
     * @param deptIds
     * @param date
     * @return
     */
    List<AppMachDTO> selectMachDTOList(@Param("deptIds") List<Integer> deptIds, @Param("date") Date date);

    /**
     * 查询设备总的统计数据
     *
     * @param deptIdList
     * @param startDate
     * @param endDate
     * @return
     */
    AppMachDataMultiStatDTO selectMachDataMultiStat(@Param("deptIdList") List<Integer> deptIdList, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查找月报设备
     *
     * @param deptIds
     * @param startDate
     * @param endDate
     * @return
     */
    List<MachMonthReportDTO> selectMonthReportMach(@Param("deptIds") List<Integer> deptIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 设备数据统计（天数）
     *
     * @param deptId
     * @param date
     * @return
     */
    MachCurveMapDayDTO selectDayMachNumByDetId(@Param("deptId") Integer deptId, @Param("date") Date date);

    /**
     * 统计设备平均值
     *
     * @param deptIds
     * @param startDate
     * @param endDate
     * @return
     */
    List<AppMachDataStatDTO> selectAvgDataByDeptIds(@Param("deptIds") List<Integer> deptIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询单机-在指定时间段内,每天的工作数据
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     */
    List<MachCurveMapDayDTO> selectSingleMachCurveMapDayList(@Param("machId") Integer machId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询单机的雷达图数据
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     */
    MachRadarMapDTO selectSingleMachRadarMap(@Param("machId") Integer machId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询设备每日油耗
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     */
    List<OilDay> selectOilDayListByMachId(@Param("machId") Integer machId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 获取设备的周报数据
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     */
    List<WeekReportDetailDTO> selectMachDayData(@Param("machId") Integer machId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询设备每日数据
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     */
    List<AppMachDayDTO> selectMachDayDataList(@Param("machId") Integer machId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查找设备多天的数据报表
     *
     * @param machIds
     * @param startDate
     * @param endDate
     * @return
     */
    List<MachDayDataDTO> selectMonthReportByMachIds(@Param("machIds") List<Integer> machIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查找某设备一天的数据
     *
     * @param machId
     * @param date
     * @return
     */
    AppMachDayDTO selectByMachIdAndDate(@Param("machId") Integer machId, @Param("date") Date date);

    /**
     * 查询设备的统计数据
     *
     * @param deptIds
     * @param startDate
     * @param endDate
     * @return
     */
    AppMachDataStatDTO selectAvgData(@Param("deptIds") List<Integer> deptIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);


    List<AppMachDay> selectByPrimaryKeys(List<String> ids);

    List<AppMach> selectByMach(@Param("list") List<String> ids);
    /**
     * 查询项目下的设备
     *
     * @param deptId
     * @return
     */
    List<AppMach> selectByPrimaryKeyHold(@Param("deptId") Integer deptId);

    List<AppMach> selectEquipmentList(@Param("req") EquipmentIdReq req);
}